<?php

/**
 * Este es la clase modelo de la tabla "clase".
 *
 * Los siguientes campos estan disponibles en la tabla 'clase':
 * @property integer $idclase
 * @property integer $asignatura_idasignatura
 * @property integer $profesor_idprofesor
 * @property integer $curso_idcurso
 *
 * Las siguientes son las relaciones disponible del modelo:
 * @property Asignatura $asignaturaIdasignatura
 * @property Curso $cursoIdcurso
 * @property Profesor $profesorIdprofesor
 * @property Nota[] $notas
 */
class Clase extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @return Clase the static model class
	 */
	public $asignatura_nombre;
	public $profesor_nombres;
	public $profesor_apellido_paterno;
	public $profesor_apellido_materno;
	public $profesor_titulo;
	public $profesor_run;
	public $curso_nombre;
	public $curso_nivel;
	public $curso_letra;
	
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'clase';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('asignatura_idasignatura, profesor_idprofesor, curso_idcurso', 'required'),
			array('asignatura_idasignatura, profesor_idprofesor, curso_idcurso', 'numerical', 'integerOnly'=>true),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('idclase, asignatura_idasignatura, profesor_idprofesor, curso_idcurso, asignatura_nombre,profesor_nombres,profesor_apellido_paterno,profesor_apellido_materno,profesor_run,profesor_titulo,curso_nombre,curso_nivel,curso_letra', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'asignatura' => array(self::BELONGS_TO, 'Asignatura', 'asignatura_idasignatura'),
			'curso' => array(self::BELONGS_TO, 'Curso', 'curso_idcurso'),
			'profesor' => array(self::BELONGS_TO, 'Profesor', 'profesor_idprofesor'),
			'evaluaciones' => array(self::HAS_MANY, 'Evaluacion', 'clase_idclase'),
		);
	}
	
	public function getPromedioClase(){
		$clase = Clase::model()->with(array(
		'curso',
		'curso.alumnos',
		'evaluaciones',
		'evaluaciones.notas',
		'evaluaciones.notas.alumno'
		))->findByPk($this->idclase);
		$sumaClase=0;
		$promedioClase=0;
		if(!$clase->curso->alumnos==null){
			foreach($clase->curso->alumnos as $i=>$alumno) {
				$prom = 0;
				$cont = 0;
				if(!$clase->evaluaciones==null){
					foreach($clase->evaluaciones as $evaluacion){
						if(!$evaluacion->notas==null){
							foreach($evaluacion->notas as $nota){
								if($alumno->idalumno == $nota->alumno->idalumno){
									$prom = $nota->nota+$prom;
									$cont++;
								}
							}
						}
						
					}
					if($cont>0){
						$sumaClase= $sumaClase+round(($prom/$cont),2);
					}
				}
			}
			if(count($clase->curso->alumnos)>0)
				$promedioClase=round(($sumaClase/count($clase->curso->alumnos)),2);
		}
	 return $promedioClase;
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'idclase' => 'Clase ID',
			'asignatura_idasignatura' => 'Asignatura',
			'profesor_idprofesor' => 'Profesor',
			'curso_idcurso' => 'Curso',
			'curso_nombre'=>'Curso',
			'curso_nivel'=>'Nivel',
			'curso_letra'=>'Letra',
			'profesor_nombres'=>'Nombres Profesor',
			'profesor_apellido_paterno'=>'Apellido Profesor',
			'profesor_apellido_materno'=>'Apellido Materno Profesor',
			'profesor_run'=>'RUN profesor',
			'profesor_titulo'=>'Titulo Profesor',
			'asignatura_nombre'=>'Asignatura'
		);
	}

	/**
	 * Devuelve una lista de modelos basado en la b�squeda o filtro acutal.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;
		$criteria->with=array('profesor','profesor.user'=>array('together'=>true),'curso','asignatura');
		$criteria->compare('idclase',$this->idclase);
		$criteria->compare('user.nombres',$this->profesor_nombres);
		$criteria->compare('user.apellido_paterno',$this->profesor_apellido_paterno);
		$criteria->compare('user.apellido_materno',$this->profesor_apellido_materno);
		$criteria->compare('user.run',$this->profesor_run);
		$criteria->compare('profesor.titulo',$this->profesor_titulo);
		$criteria->compare('asignatura.nombre',$this->asignatura_nombre);
		$criteria->compare('curso.nombre',$this->curso_nombre);
		$criteria->compare('curso.nivel',$this->curso_nivel);
		$criteria->compare('curso.letra',$this->curso_letra);
		$criteria->compare('asignatura_idasignatura',$this->asignatura_idasignatura);
		$criteria->compare('profesor_idprofesor',$this->profesor_idprofesor);
		$criteria->compare('curso_idcurso',$this->curso_idcurso);
		
		$sort = new CSort();
		
		$sort-> attributes = array(
					'profesor_nombres'=>array(
						'asc'=>'user.nombres',
						'desc'=>'user.nombres DESC',
					),
					'profesor_apellido_paterno'=>array(
						'asc'=>'user.apellido_paterno',
						'desc'=>'user.apellido_paterno DESC',
					),
					'profesor_apellido_materno'=>array(
						'asc'=>'user.apellido_materno',
						'desc'=>'user.apellido_materno DESC',
					),
					'profesor_run'=>array(
						'asc'=>'user.run',
						'desc'=>'user.run DESC',
					),
					'profesor_titulo'=>array(
						'asc'=>'profesor.titulo',
						'desc'=>'profesor.titulo DESC',
					),
					'curso_nombre'=>array(
						'asc'=>'curso.nombre',
						'desc'=>'curso.nombre DESC',
					),
					'curso_nivel'=>array(
						'asc'=>'curso.nivel',
						'desc'=>'curso.nivel DESC',
					),
					'asignatura_nombre'=>array(
						'asc'=>'asignatura.nombre',
						'desc'=>'asignatura.nombre DESC',
					),
			'*',
		);
		
		
		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria, 'sort'=>$sort, 'pagination'=>array(
		'pageSize'=>10,),
		
		));
	}
}